package com.it.schoolhomeos.repository;

import com.it.schoolhomeos.entity.ClassInfo;
import com.it.schoolhomeos.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 班级信息数据访问接口
 * 
 * 提供对ClassInfo实体的数据库操作方法
 * 继承JpaRepository以获取基本的CRUD操作
 */
@Repository
public interface ClassInfoRepository extends JpaRepository<ClassInfo, Long> {
    
    /**
     * 根据班主任查找班级列表
     * 
     * @param teacher 班主任用户对象
     * @return 指定班主任负责的班级列表
     */
    List<ClassInfo> findByTeacher(User teacher);
    
    /**
     * 根据年级查找班级列表
     * 
     * @param grade 年级名称
     * @return 指定年级的班级列表
     */
    List<ClassInfo> findByGrade(String grade);
    
    /**
     * 根据教师ID查找班级列表
     * 
     * @param teacherId 教师ID
     * @return 该教师负责的班级列表
     */
    @Query("SELECT c FROM ClassInfo c WHERE c.teacher.id = :teacherId")
    List<ClassInfo> findByTeacherId(@Param("teacherId") Long teacherId);
    
    /**
     * 根据关键字查询班级
     * 
     * @param keyword 关键字（班级名称、年级、班主任姓名）
     * @return 匹配关键字的班级列表
     */
    @Query("SELECT DISTINCT c FROM ClassInfo c LEFT JOIN c.teacher t WHERE " +
           "c.name LIKE %:keyword% OR " +
           "c.grade LIKE %:keyword% OR " +
           "t.name LIKE %:keyword%")
    List<ClassInfo> findByKeyword(@Param("keyword") String keyword);
} 